package Parser;

import Data.RuleDB;
import Facade.ParserData;
import GUI.AObserver;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author Martin
 * @version 1.0 @created 22-III-2012 16:32:23
 */
public abstract class AParser {

    private RuleDB db;
    /**
     * reference predana creatorem, parser sam neobsluhuje observer
     */
    protected ArrayList<AObserver> observers;
    protected RuleDB ruleDB;
    //private AObserver m_AObserver;
    protected my_thread thread;

    public AParser(ArrayList<AObserver> observers) {
        this.observers = observers;
        ruleDB = db.createInstance(observers);       
    }

    /**
     * ukonci sve vlakno
     */
    public void end() {
        thread.interrupt();
        ruleDB.end(observers);
    }

    /**
     * Spouští parsování v jiném vláknu, ošetřit nutné čekání-> chyba, 5 min,
     * získání dat 1 hodina, jinak běží až do konec aplikace, před ukončením
     * aplikace ukončit i toto vlákno!!!
     *
     * @param parserData
     */
    public abstract void parse(ParserData parserData);

    /**
     *
     * @param message
     */
    public void update(String message) {
        if(observers!=null)
            for(int i=0;i<observers.size();i++){
                observers.get(i).messageParser(message);
                //m_AObserver;
            }
    }

    protected abstract class my_thread extends Thread {

        public my_thread() {
        }

        @Override
        public abstract void run();
    }
}